package ar.com.ctrln.persistence.model.compra;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import ar.com.ctrln.persistence.model.proveedor.Proveedor;

@Entity
@Table(name = "COMPRA")
public class Compra {

	public static final String ESTADO_ENESPERA = "En espera";
	public static final String ESTADO_CANCELADA = "Cancelada";
	public static final String ESTADO_RECIVIDA = "Recibida";
	public static final String ESTADO_ATRAZADA = "Atrasada";
	public static final String ESTADO_ENRECLAMO = "En reclamo";

	public static final String FORMAPAGO_EFECTIVO = "Efectivo";
	public static final String FORMAPAGO_TARJETA = "Tarjeta de Crédito";
	public static final String FORMAPAGO_CHEQUE = "Cheque";
	public static final String FORMAPAGO_TRANSFERENCIA = "Transferencia Bancaria";

	public static final String ESTADOPAGO_PENDIENTE = "Pendiente de pago";
	public static final String ESTADOPAGO_CUOTASPENDIENTES = "Cuotas pendientes";
	public static final String ESTADOPAGo_PAGADO = "Pagado";

	@Transient
	SimpleDateFormat sdf=new SimpleDateFormat("dd MMM yyyy");
		
	@Id
	@GeneratedValue
	@Column(name = "id_compra")
	private long id;

	@Column
	private Date fechaAlta;

	@Column
	private Date fechaPago;

	@Column
	private Date fechaRecepTentativa;

	@Column
	private Date fechaRecepReal;

	@Column
	private String estado;
	
	@Column
	private String estadoPago;

	@Column
	private String resena;
	
	@Column
	private String reclamo;

	@Column
	private String formaPago;
	
	@Column
	private double costoExtra;
	
	@Column
	private double totalCompra;

	@Column
	private int cantCuotas;
	
	@ManyToOne
	@JoinColumn(name = "id_proveedor")
	private Proveedor proveedor;

	@OneToMany(fetch=FetchType.EAGER, cascade = { javax.persistence.CascadeType.ALL })
	@JoinColumn(name = "id_compra")
	private Set<DetalleCompra> detalles;

	public Compra() {
		super();
	}

	
	public String getEstadoPago() {
		return estadoPago;
	}


	public void setEstadoPago(String estadoPago) {
		this.estadoPago = estadoPago;
	}


	public double getTotalCompra() {
		return totalCompra;
	}

	public void setTotalCompra(double totalCompra) {
		this.totalCompra = totalCompra;
	}


	public String getReclamo() {
		return reclamo;
	}


	public void setReclamo(String reclamo) {
		this.reclamo = reclamo;
	}


	public double getCostoExtra() {
		return costoExtra;
	}

	public void setCostoExtra(double costoExtra) {
		this.costoExtra = costoExtra;
	}

	public Date getFechaAlta() {
		return fechaAlta;
	}
	
	public String getFechaAltaFormat() {
		return sdf.format(fechaAlta);
	}

	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}

	public Date getFechaPago() {
		return fechaPago;
	}

	public void setFechaPago(Date fechaPago) {
		this.fechaPago = fechaPago;
	}

	public Date getFechaRecepTentativa() {
		return fechaRecepTentativa;
	}
	
	public void setFechaRecepTentativa(Date fechaRecepTentativa) {
		this.fechaRecepTentativa = fechaRecepTentativa;
	}

	public Date getFechaRecepReal() {
		return fechaRecepReal;
	}
	
	public String getFechaRecepRealFormat() {
		if(fechaRecepReal!=null){
		return sdf.format(fechaRecepReal);
		}
		else{
			return null;
		}
	}

	public void setFechaRecepReal(Date fechaRecepReal) {
		this.fechaRecepReal = fechaRecepReal;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getResena() {
		return resena;
	}

	public void setResena(String resena) {
		this.resena = resena;
	}

	public String getFormaPago() {
		return formaPago;
	}

	public void setFormaPago(String formaPago) {
		this.formaPago = formaPago;
	}

	public int getCantCuotas() {
		return cantCuotas;
	}

	public void setCantCuotas(int cantCuotas) {
		this.cantCuotas = cantCuotas;
	}

	public Proveedor getProveedor() {
		return proveedor;
	}

	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}

	public Set<DetalleCompra> getDetalles() {
		return detalles;
	}

	public void setDetalles(Set<DetalleCompra> detalles) {
		this.detalles = detalles;
	}
	
	

}
